﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

namespace ADIGRE.Domain.View
{
    public class vwLivroCaixa
    {

        /// <summary>
        /// Verifica se o mês já foi contaliblizado
        /// <see cref="DsContabilizado"/>
        /// </summary>
        public virtual bool isContabilizado { get; set; }
        public virtual List<vwLancamentoLivroCaixa> Lancamentos { get; set; }
        [Display(Name = "Saldo Anterior"), DisplayFormat(DataFormatString = "{0:N2}")]
        public virtual decimal VlSaldoAnterior { get; set; }
        [Display(Name = "Período"), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
        public virtual DateTime? DtPeriodoInicial { get; set; }
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
        public virtual DateTime? DtPeriodoFinal { get { return (this.DtPeriodoInicial.HasValue) ? this.DtPeriodoInicial.Value.AddMonths(1).AddDays(-1) : this.DtPeriodoInicial; } }
        [Display(Name = "Subtotal"), DisplayFormat(DataFormatString = "{0:N2}")]
        public virtual decimal VlSubtotal { get { return (this.VlEntradas - this.VlSaidas); } }
        [Display(Name = "Total"), DisplayFormat(DataFormatString = "{0:N2}")]
        public virtual decimal VlTotal { get { return (this.VlSaldoAnterior + this.VlSubtotal); } }
        [Display(Name = "Saídas"), DisplayFormat(DataFormatString = "{0:N2}")]
        public virtual decimal VlSaidas { get { return this.Lancamentos.Sum(x => x.VlSaida); } }
        [Display(Name = "Entradas"), DisplayFormat(DataFormatString = "{0:N2}")]
        public virtual decimal VlEntradas { get { return this.Lancamentos.Sum(x => x.VlEntrada); } }
        [Display(Name = "Corrigir")]
        public virtual string DsContabizado { get { return (this.isContabilizado) ? "Ok": "--"; } }
        [Display(Name = "Pesquisar período"), DisplayFormat(DataFormatString = "{0:MM/yyyy}")]
        public virtual DateTime DtReferencia
        {
            get
            {
                var now = DateTime.Now;
                if (NuMes <= 0)
                    NuMes = now.Month;
                if (NuAno <= 0)
                    NuAno = now.Year;
                return Convert.ToDateTime(string.Format("01/{0}/{1}", NuMes, NuAno));
            }
        }
        public virtual int NuMes { get; set; }
        public virtual int NuAno { get; set; }

        public vwLivroCaixa()
        {
            this.Lancamentos = new List<vwLancamentoLivroCaixa>();
        }

    }
}
